/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ComExWeb.service;

import ComExWeb.dominio.Categoria;
import ComExWeb.dominio.Config;
import ComExWeb.dominio.Item;
import ComExWeb.dominio.Menu;
import ComExWeb.dominio.TipoEndereco;
import ComExWeb.dominio.security.Grupo;
import ComExWeb.dominio.security.Recurso;
import ComExWeb.dominio.security.Usuario;
import ComExWeb.util.StringUtil;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author 
 */
@Singleton
@Startup
public class SetupDataService {

    @PersistenceContext
    private EntityManager em;

    public void setupData() {

        Config cfg = em.find(Config.class, 1);

        if (cfg != null) {
            if (cfg.getJaPopulou()) {
                return;
            }
        } else {
            cfg = new Config();
            cfg.setId(1);
            em.persist(cfg);
        }

        /**
         * Grupos de usuários
         */
        Grupo grupoAdmin = new Grupo();
        Grupo grupoUsers = new Grupo();
        em.persist(grupoAdmin);
        em.persist(grupoUsers);

        grupoAdmin.setNomeGrupo("admin");
        grupoAdmin.setDescGrupo("Administradores");
        grupoUsers.setNomeGrupo("users");
        grupoUsers.setDescGrupo("Usuarios");

        /**
         * Páginas do sistema
         */
        Recurso list_cat = em.merge(new Recurso("list_cat", "Listagem de categorias", "/list_cat.xhtml", Boolean.FALSE, grupoAdmin, grupoUsers));
        Recurso form_cat = em.merge(new Recurso("form_cat", "Formulário de categoria", "/form_cat.xhtml", Boolean.FALSE, grupoAdmin, grupoUsers));
        Recurso list_item = em.merge(new Recurso("list_item", "Listagem de itens", "/list_item.xhtml", Boolean.FALSE, grupoAdmin, grupoUsers));
        Recurso form_item = em.merge(new Recurso("form_item", "Formulário de item", "/form_item.xhtml", Boolean.FALSE, grupoAdmin, grupoUsers));
        Recurso list_grupo = em.merge(new Recurso("list_grupo", "Listagem de grupos", "/list_grupo.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_grupo = em.merge(new Recurso("form_grupo", "Formulário de grupo", "/form_grupo.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_recurso = em.merge(new Recurso("list_recurso", "Listagem de recursos", "/list_recurso.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_recurso = em.merge(new Recurso("form_recurso", "Formulário de recurso", "/form_recurso.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_usuario = em.merge(new Recurso("list_usuario", "Listagem de usuários", "/list_usuario.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_usuario = em.merge(new Recurso("form_usuario", "Formulário de usuário", "/form_usuario.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_pessoa = em.merge(new Recurso("form_pessoa", "Formulário de Cliente", "/form_pessoa.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_pessoa = em.merge(new Recurso("list_pessoa", "Listagem de Cliente", "/list_pessoa.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_menu = em.merge(new Recurso("list_menu", "Menu do Sistema", "/list_menu.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_endereco = em.merge(new Recurso("form_endereco", "Formulário de endereco", "/form_endereco.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_oferta = em.merge(new Recurso("list_oferta", "Listagem de ofertas", "/list_oferta.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_oferta = em.merge(new Recurso("form_oferta", "Formulário de oferta", "/form_oferta.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_equipe = em.merge(new Recurso("list_equipe", "Listagem de equipes", "/list_equipe.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_equipe = em.merge(new Recurso("form_equipe", "Formulário de equipes", "/form_equipe.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_rodada = em.merge(new Recurso("list_rodada", "Listagem de rodada", "/list_rodada.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_rodada = em.merge(new Recurso("form_rodada", "Formulário de rodada", "/form_rodada.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso list_aposta = em.merge(new Recurso("list_aposta", "Listagem de aposta", "/list_aposta.xhtml", Boolean.FALSE, grupoAdmin));
        Recurso form_aposta = em.merge(new Recurso("form_aposta", "Formulário de aposta", "/form_aposta.xhtml", Boolean.FALSE, grupoAdmin));

        /**
         * Usuários do sistema
         */
        Usuario admin = em.merge(new Usuario("admin", new StringUtil().md5("admin"), "Administrador do Sistema","123456789123","gilisimoes@gmail.com", grupoAdmin));
        Usuario user = em.merge(new Usuario("user", new StringUtil().md5("user"), "Usuário do Sistema","123456789123","gilisimoes@gmail.com", grupoUsers));

        /**
         * Categorias
         */
        Categoria bebidas = em.merge(new Categoria("bebidas", "Categoria de Bebidas"));
        Categoria alimentos = em.merge(new Categoria("alimentos", "Categoria de Alimentos"));

        Item pitu = em.merge(new Item("Pitu", "Aguardente de cana de açúcar, A.K.A. Catchaça", bebidas));
        Item riunite = em.merge(new Item("Riunite", "Vinho italiano, bom e barato", bebidas));
        Item duelo = em.merge(new Item("Duelo", "Caninha fulera", bebidas));
        Item awamori = em.merge(new Item("Awamori", "Aguardente de arroz de Okinawa", bebidas));
        Item ypioca = em.merge(new Item("Ypioca", "Cachaça", bebidas));
        //TipoEndereco residencial = em.merge(new TipoEndereco("Residencial", "endereco Residencial"));
        //Item bife = em.merge(new Item("Bife de baby búfalo", "Melhor carne que eu já provei na vida", alimentos));

        Menu cadastrosBasicos = new Menu();
        cadastrosBasicos.setLabel("Cadastros");
        cadastrosBasicos.setMenuPai(null);
        cadastrosBasicos.setOrdem(1);

        Menu categoria = new Menu();
        categoria.setLabel("Categorias");
        categoria.setOrdem(1);
        cadastrosBasicos.addMenuFilho(categoria);

        Menu itens = new Menu();
        itens.setLabel("Itens");
        itens.setOrdem(2);
        cadastrosBasicos.addMenuFilho(itens);

        Menu seguranca = new Menu();
        seguranca.setLabel("Segurança");
        seguranca.setOrdem(2);
        seguranca.setMenuPai(null);

        Menu grupo = new Menu();
        grupo.setLabel("Grupos");
        grupo.setOrdem(1);
        seguranca.addMenuFilho(grupo);

        em.merge(cadastrosBasicos);
        em.merge(seguranca);

        cfg.setJaPopulou(Boolean.TRUE);

    }
}
